//引入express
const express = require("express");
//引入连接池模块
const pool = require("../pool.js");
//console.log(pool);
//创建路由对象
const r = express.Router();
//添加路由
//1.用户注册(post  /reg)
// http://127.0.0.1:8080/v1/users/reg
r.post("/reg",(req,res,next)=>{
	//1.1获取post请求的数据
	let obj = req.body;
	//console.log(obj);
	//1.2验证各项数据是否为空
	if(!obj.uname){
		//json方法将js对象转为js对象
		res.json({code: 401,msg: "用户名不能为空"});
	//此为函数内阻止往后执行，故使用return
		return;
	}
	//练习：完成其他各项验证。
	if(!obj.upwd){
		res.json({code: 402,msg:"密码不能为空"});
		return;
	}
	if(!obj.email){
		res.json({code:403,msg:"email不能为空"});
		return;
	}
	if(!obj.phone){
		res.json({code:404,msg:"电话号码不能为空"});
		return;
	}

	//验证手机号码格式
	//正则表达式.test（手机号）
	if(!/^1[3-9]\d{9}$/.test(obj.phone)){
	res.json({code: 405,msg:"手机号码格式错误"});
	return;
		}
	//1.3执行SQL命令(user中插入数据)
	pool.query("insert into xz_user set ?",[obj],(err,result)=>{
	if(err){
		//如果数据库出现错误，交给下一个错误处理的中间件
		next(err);
		//阻止往后执行
		return;
	}
	console.log(result);
	//表示插入成功
	res.json({code: 200,msg: "注册成功"});
	});	
});

//2.用户登录
r.post("/login",(req,res,next)=>{
	//2.1 获取post请求数据
	let obj1 = req.body;
	//console.log(obj1);
	//2.2验证各项是否为空
	if(!obj1.uname){
		res.json({code: 406,msg:"用户名不能为空"});
		return;
	}
	if(!obj1.upwd){
		res.json({code:407,msg:"密码不能为空"});
		return;
	}

	//2.3执行SQL命令
	pool.query("select * from xz_user where uname=? and upwd=?",[obj1.uname,obj1.upwd],(err,result)=>{
	if(err){
		next(err);
		return;
	}
	console.log(result);
	//查询的结果是数组，如果是一个数组说明登陆失败，否则登录成功
	if(result.length === 0){
		res.json({code:200,msg:"登陆失败"});
	}else{
		res.json({code:200,msg:"登录成功"});
		
	}

	});	
});


//3.修改用户（put /）

r.put("/",(req,res,next)=>{
	//3.1 获取post传递的数据（uid email ）
	let obj = req.body;
	console.log(obj);

	//3.2验证各项数据是否为空
	let i = 400;    //i状态码
	for(let k in obj){
	//每遍历一个属性，状态码+1
		i++;
		//k属性名  obj[k] 属性值
   		//console.log(obj(k));
		//若属性值为空，提示这个值不能为空
		if(!obj[k]){
			res.json({code:i,msg:`${k}不能为空`});
			return;
		}
	}
	//3.3执行SQL命令，修改
	pool.query("update xz_user set ? where uid=?",[obj,obj.uid],(err,result)=>{
		if(err){
			next(err);
			return;
		}
		console.log(result);
		//结果是对象，若对象下的affectedRows的值是0则说明修改失败，反之成功
		if(result.affectedRows === 0){
			res.json({code:201,msg:"修改失败"});
		}else{
			res.json({code:200,msg:"修改成功"});	
		}
		
	});
});

//4.查询用户
r.get("/:uid",(req,res,next)=>{
	//4.1路由传参
	let obj = req.params;
	console.log(obj);
	//执行SQL命令，查询编号对应的用户
	pool.query("select uid,uname,email,phone from xz_user where uid=?",[obj.uid],(err,result)=>{
		if(err){
			next(err);
			return;
		}
		console.log(result);
		if(result.length === 0){
			res.send({code:201,msg:"查询失败"});	
		}else{
			res.send({code:200,msg:"查询成功",data:result});
		}
	});
});



//5.删除用户
r.delete("/:uid",(req,res,next)=>{
		let obj = req.params;
		console.log(obj);

		//SQL 命令
		pool.query("delete from xz_user where uid=?",[obj.uid],(err,result)=>{
		if(err){
		next(err);
		return;
		}
		console.log(result);
		if(result.affectedRows===0){
			res.send({code:201,msg:"删除失败"});	
		}else{
			res.send({code:200,msg:"删除成功"});
		}
	});
});

//6.用户列表(get  /)
r.get("/",(req,res,next)=>{
	//6.1获取查询字符串传递数据
	let obj = req.query;
	//console.log(obj);

	//6.2验证是否为空，如果为空设置默认值
	if(!obj.pno) obj.pno = 1;
	if(!obj.count) obj.count = 5;	
	console.log(obj);

	//6.3计算开始查询的值
	let start = (obj.pno - 1) * obj.count;
	//6.4把每页的数据量转为整型
	let size = parseInt(obj.count);
	//6.5执行SQL命令
	pool.query("select uid,uname,email,phone from xz_user limit ?,?",[start,size],(err,result)=>{
		if(err){
			next(err);
			return;
		}
		console.log(result);
		//6.6查询结果为数组，把数组响应给浏览器
		res.json({code:200,msg:"查找成功",data:result});
	});
});


//导出路由器对象
module.exports = r;
